// pages/cart/index.js
Page({
  data: {
    // 收货地址
    address: {},
    // 购物车商品数据
    goods: [],
    // 保存总价格
    allPrice: 0,
    // 购物车总数量
    allNumber: 0,
    // 记录全选的状态
    allSelect: true
  },
  onLoad() {
    // 拿到本地储存数据（收货地址）
    this.setData({
      address: wx.getStorageSync('address') || {}
    })
  },
  onShow() {
    // 自定义tobBar
    if (typeof this.getTabBar === 'function' &&
      this.getTabBar()) {
      this.getTabBar().setData({
        selected: 2,
        cartNum: (wx.getStorageSync('goods') || []).length
      })
    }
    // 拿购物车商品数据
    this.setData({
      goods: wx.getStorageSync('goods') || []
    })

    // 加载计算总价格
    this.handleGetAllprice();
  },
  // 点击获取收货地址的函数
  handleGetAddress() {
    wx.chooseAddress({
      success: res => {
        // 将获取的收货地址保存起来
        this.setData({
          address: {
            name: res.userName,
            phone: res.telNumber,
            getAddress: res.provinceName + res.cityName + res.countyName + res.detailInfo
          }
        })
        // 将收货地址储存到本地
        wx.setStorageSync('address', this.data.address)
      }
    })
  },
  // 计算总价格的处理
  handleGetAllprice() {
    var price = 0;
    var num = 0;
    this.data.goods.forEach(v => {
      // 判断如果是选中状态就计算
      if (v.cart_select === true) {
        // 计算总价格
        price += v.cart_number * v.cart_price;
        //  计算总数量
        num += v.cart_number
      }
    })

    this.setData({
      allPrice: Number(price).toFixed(2),
      allNumber: num
    })
  },
  // 处理购物车商品数量的加减
  handleChangeNum(e) {
    const { index, num } = e.currentTarget.dataset
    // console.log(index)
    // console.log(num)
    this.data.goods[index].cart_number += num;
    // console.log(this.data.goods[index].cart_number)
    // 判断数量为0的处理
    if (this.data.goods[index].cart_number == 0) {
      // 出现弹框提醒
      wx.showModal({
        title: '提示',
        content: '是否删除该商品',
        success: res => {
          if (res.confirm) {
            // 点确认
            this.data.goods.splice(index, 1)
          } else if (res.cancel) {
            // 点取消
            this.data.goods[index].cart_number += 1
            this.setData({
              allNumber: this.data.allNumber + 1
            })
          }
          // 重新赋值
          this.setData({
            goods: this.data.goods
          })
          //  将变更后的数据重新保存到本地
          wx.setStorageSync('goods', this.data.goods)
          // 重新加载购物车的数量
          if (typeof this.getTabBar === 'function' &&
            this.getTabBar()) {
            this.getTabBar().setData({
              cartNum: (wx.getStorageSync('goods') || []).length
            })
          }
        }
      })
    }
    //  商品加减时赋值
    this.setData({
      goods: this.data.goods
    })
    //  将变更后的数据重新保存到本地
    wx.setStorageSync('goods', this.data.goods)
    //  加减数目后重新加载总数
    this.handleGetAllprice();
  },
  // 商品数量失去焦点的处理函数
  handleBlur(e) {
    // 拿到输入框的当前值
    let { value } = e.detail
    const { index } = e.currentTarget.dataset
    // console.log(index)
    // 数量取整
    value = Math.floor(Number(value))
    // 判断数量小于1则等于1
    if (value < 1) {
      value = 1
    }
    this.data.goods[index].cart_number = value;
    // 修改数量后重新赋值
    this.setData({
      goods: this.data.goods
    })
    // 计算总价
    this.handleGetAllprice();
    // 修改数据后保存到本地
    wx.setStorageSync('goods', this.data.goods)
  },
  // 点击单选按钮的操作
  handleIcon(e) {
    const { index } = e.currentTarget.dataset;
    const { cart_select } = this.data.goods[index]
    this.data.goods[index].cart_select = !cart_select
    // console.log(this.data.goods[index].cart_select)
    this.setData({
      goods: this.data.goods
    })
    //  数据重新保存到本地
    wx.setStorageSync('goods', this.data.goods)
    // 重新计算总价格
    this.handleGetAllprice()
    // 全选的操作
    this.handleAllSelectJudge();
  },
  // 判断全选的状态
  handleAllSelectJudge() {
    //  假设都为true
    let current = true;
    // 循环判断为false
    this.data.goods.forEach(v => {
      if (current == false) {
        return;
      }
      if (v.cart_select === false) {
        current = false;
      }
    })
    // 赋值给全选状态
    this.setData({
      allSelect: current
    })
  },
  // 点击全选的功能
  handleAllSelect() {
    const { allSelect } = this.data;

    this.data.goods.forEach(v => {
      v.cart_select = !allSelect
    })

    this.setData({
      goods: this.data.goods,
      allSelect: !allSelect
    })
    // 判断全选的状态
    this.handleAllSelectJudge();
    // 计算总价格
    this.handleGetAllprice()
    // 将新的状态保存到本地
     wx.setStorageSync('goods', this.data.goods)
    
  }
})